package com.silence.gmall.product.assembler;

import com.silence.gmall.product.domain.entity.SkuImage;
import com.silence.gmall.product.dto.SkuImageDto;
import org.mapstruct.*;

import java.util.List;

/**
 * @Author silence
 * @Date 2025-08-18 23:11
 * @Email 792245022@qq.com
 * @Version 1.0
 * @Description 库存单元图片工厂
 */
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
public interface SkuImageFactory {

    /**
     * 将 SkuImageDto 转换为 SkuImage
     *
     * @param source 源对象
     * @return 目标对象
     */
    @Named("skuImageDto2SkuImageWithContext")
    @Mapping(target = "skuId", expression = "java(skuId)")
    SkuImage skuImageDto2SkuImageWithContext(SkuImageDto source, @Context Long skuId);

    /**
     * 将 SkuImageDtoList 转换为 SkuImageList
     *
     * @param source 源对象
     * @return 目标对象
     */
    @Named("skuImageList2SkuImageDtoListWithContext")
    @IterableMapping(qualifiedByName = "skuImageDto2SkuImageWithContext")
    List<SkuImage> skuImageList2SkuImageDtoListWithContext(List<SkuImageDto> source, @Context Long skuId);

    /**
     * 将 SkuImage 转换为 SkuImageDto
     *
     * @param source 源对象
     * @return 目标对象
     */
    SkuImageDto skuImage2SkuImageDto(SkuImage source);

    /**
     * 将 SkuImageList 转换为 SkuImageDtoList
     *
     * @param source 源对象
     * @return 目标对象
     */
    List<SkuImageDto> skuImageList2SkuImageDtoList(List<SkuImage> source);
}
